#include <iostream>
#include <jsoncpp/json/json.h>
#include <memory>
#include <sstream>
std::string Serialize()
{
    // 将需要进行序列化的数据，存储在Json::Value对象中
    Json::Value root;
    root["姓名"] = "张三";
    root["年龄"] = "18";
    root["成绩"].append(66);
    root["成绩"].append(77);
    root["成绩"].append(88);
    // 实例化一个StreamWriterBuilder工厂类对象
    Json::StreamWriterBuilder Wbuild;
    // 通过StreamWriterBuilder工厂类对象生产一个StreamWriter对象
    std::unique_ptr<Json::StreamWriter> sw(Wbuild.newStreamWriter());
    // 使用StreamWriter对象，对Json::Value中存储的数据进行序列化
    std::stringstream ss;
    sw->write(root,&ss);
    // 打印ss中序列化好的结果
    return ss.str();
}
int main()
{
    std::string info = Serialize(); //获取序列化结果，参考前一个代码中的序列化
    // 实例化一个CharReaderBuilder工厂类对象
    Json::CharReaderBuilder crb;
    // 使用CharReaderBuilder工厂类生产一个CharReader对象
    std::unique_ptr<Json::CharReader> cr(crb.newCharReader());
    // 定义一个Json::Value对象存储解析后的数据
    Json::Value root;
    // 使用CharReader对象进行json格式字符串str的反序列化
    std::string errs;
    cr->parse(info.c_str(),info.c_str()+info.size(),&root,&errs);
    // 逐个元素访问Json::Value中的数据
    std::cout << "姓名: "<< root["姓名"].asString() << std::endl;
    std::cout << "年龄: "<< root["年龄"].asString() << std::endl;
    std::cout << "成绩: ";
    for(int i = 0 ; i < root["成绩"].size() ; ++i)
    {
        std::cout << root["成绩"][i] << " ";
    }
    std::cout << std::endl;
    return 0;
}